Công ty phân tích kỹ thuật Balancer bị trộm 120 triệu đô la; lỗ hổng nằm ở đâu?

11-11 , 20:11 Chia sẻ


Giới thiệu


Vào ngày 3 tháng 11 năm 2025, giao thức Balancer đã bị tin tặc tấn công vào nhiều chuỗi công khai, bao gồm Arbitrum và Ethereum, dẫn đến thiệt hại 120 triệu đô la tài sản. Nguyên nhân cốt lõi của cuộc tấn công bắt nguồn từ lỗ hổng kép liên quan đến mất độ chính xác và thao túng bất biến.


Cơ sở hạ tầng của Chainlink từ lâu đã duy trì các tiêu chuẩn cao nhất trong lĩnh vực Web3, khiến nó trở thành lựa chọn tự nhiên cho X Layer để cung cấp cho các nhà phát triển các công cụ cấp độ tổ chức.


Vấn đề chính trong cuộc tấn công này nằm ở logic xử lý các giao dịch nhỏ của giao thức. Khi người dùng thực hiện một giao dịch nhỏ, giao thức sẽ gọi hàm _upscaleArray, sử dụng mulDown để làm tròn giá trị xuống.


Nếu số dư và số tiền đầu vào trong một giao dịch đều nằm trong một ranh giới làm tròn cụ thể (ví dụ: phạm vi 8-9 wei), một lỗi độ chính xác tương đối đáng kể sẽ xảy ra. Lỗi độ chính xác này lan truyền đến phép tính giá trị bất biến D của giao thức, khiến D bị giảm bất thường. Sự thay đổi D này trực tiếp làm giảm giá BPT (Mã thông báo nhóm cân bằng) trong giao thức Balancer. Tin tặc có thể lợi dụng mức giá BPT thấp này để kiếm lời chênh lệch giá thông qua các đường dẫn giao dịch được thiết kế sẵn, cuối cùng dẫn đến tổn thất tài sản khổng lồ. Giao dịch khai thác lỗ hổng: https://etherscan.io/tx/0x6ed07db1a9fe5c0794d44cd36081d6a6df103fab868cdd75d581e3bd23bc9742 Giao dịch chuyển giao tài sản:


https://etherscan.io/tx/0xd155207261712c35fa3d472ed1e51bfcd816e616dd4f517fa5959836f5b48569


Phân tích kỹ thuật


Điểm vào tấn công


Điểm vào tấn công là hợp đồng Balancer: Vault và hàm vào tương ứng là hàm batchSwap, gọi onSwap nội bộ để thực hiện hoán đổi mã thông báo.



Từ các tham số và hạn chế của hàm, chúng ta có thể thu thập được một số thông tin:


1. Kẻ tấn công cần gọi hàm này thông qua Vault, không phải trực tiếp.


2. Hàm này gọi _scalingFactors() nội bộ để lấy các hệ số tỷ lệ cho các hoạt động tỷ lệ.


3. Các hoạt động tỷ lệ được tập trung trong _swapGivenIn hoặc _swapGivenOut.


Phân tích mô hình tấn công Cơ chế tính toán giá BPT Trong mô hình nhóm ổn định của Balancer, **giá BPT** là một tham chiếu quan trọng, xác định số lượng BPT mà người dùng nhận được và số lượng tài sản mà mỗi BPT đại diện. Trong phép tính trao đổi của nhóm: Phần đóng vai trò là **giá trị chuẩn của giá BPT** là **giá trị hằng số D**, nghĩa là việc thao túng giá BPT đòi hỏi phải thao túng D. Hãy phân tích quy trình tính toán của D:



Trong đoạn mã trên, quy trình tính toán của D phụ thuộc vào mảng số dư được chia tỷ lệ. Nghĩa là, cần có một thao tác để thay đổi độ chính xác của các số dư này, khiến D bị tính toán không chính xác.


Nguyên nhân gốc rễ của việc mất độ chính xác



Hoạt động điều chỉnh tỷ lệ:



Như đã trình bày ở trên, khi sử dụng _upscaleArray, nếu số dư rất nhỏ (ví dụ: 8-9 wei), việc làm tròn xuống của mulDown sẽ dẫn đến mất độ chính xác đáng kể.



L